package demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:接口
 * User: 石方旭
 * Date: 2022-04-09
 * Time: 18:30
 */


class Animal {
    public String name;

    public Animal(String name) {
        this.name = name;
    }
}

//利用interface关键字来实现接口，interface不是类

interface IFly{
    //接口中的成员变量都是常量不能被修改 只能用public static final来修饰
    //public static final int a =10;
    //接口中不能有具体方法的实现，如果要有具体方法的实现必须在方法前加上default

//    default void flying(){
//    }
    void fly();//接口中的方法默认都是public abstract可以加也可以不加
}

interface IRun{
    void run();
}

interface ISwim{
    void swim();
}

interface ISleep{
    void sleep();
}

interface ISing {
    void Sing();
}
//使用implements 关键字可以实现接口功能
class Dog extends Animal implements IRun,ISleep{
    //public String dogName;
    //如果父类自己写了构造方法需要在子类中先为父类构造


    public Dog(String name) {
        super(name);
    }


    //如果实现了某个接口必须要在类中重写接口中的方法
    @Override
    public void run() {
        System.out.println("正在拼命奔跑中@@@");
    }

    @Override
    public void sleep() {
        System.out.println(this.name+"正在睡觉中^^^^^^^");
    }
}
//一个类可以实现多个接口
class bird implements IFly,ISleep,ISing{
    public String birdName;

    public bird(String birdName) {
        this.birdName = birdName;
    }

    @Override
    public void fly() {
        System.out.println(this.birdName+"正在飞~~~~");
    }

    @Override
    public void sleep() {
        System.out.println(this.birdName+"正在睡觉&&&");
    }

    @Override
    public void Sing() {
        System.out.println(this.birdName+"正在歌唱***");
    }
}


public class TestDemo2 {

    public static void action1(IFly flying) {
        flying.fly();
    }

    public static void action2(ISing singing) {
        singing.Sing();
    }

    public static void action3(ISleep sleeping) {
        sleeping.sleep();
    }

    public static void action4(IRun running) {
        running.run();
    }

    public static void main(String[] args) {
       action1(new bird("小鸟"));
       action2(new bird("小鸟"));
       action4(new Dog("大哈"));
    }

}
